const { sendSmsCode } = require("../../lib/utils/sms");
const { verifyCaptcha } = require("../../lib/utils/captcha");
const { SMS_SCENE } = require("../../common/constants");
const { ERROR } = require("../../common/error");

/**
 * 发送短信验证码
 * @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#send-sms-code
 * @param {Object} params
 * @param {String} params.mobile    手机号
 * @param {String} params.captcha   图形验证码
 * @param {String} params.scene     短信验证码使用场景
 * @returns
 */
module.exports = async function (params = {}) {
  const schema = {
    mobile: "mobile",
    captcha: "string",
    scene: "string",
  };
  this.middleware.validate(params, schema);
  const { mobile, captcha, scene } = params;
  if (!Object.values(SMS_SCENE).includes(scene)) {
    throw {
      errCode: ERROR.INVALID_PARAM,
    };
  }
  await verifyCaptcha.call(this, {
    scene: "send-sms-code",
    captcha,
  });

  // -- 测试代码
  const { templateId } =
    (this.config.service &&
      this.config.service.sms &&
      this.config.service.sms.scene &&
      this.config.service.sms.scene[scene]) ||
    {};
  if (!templateId || !templateId.replace(/[^0-9a-zA-Z]/g, "")) {
    await require("../../lib/utils/verify-code").setMobileVerifyCode.call(
      this,
      {
        mobile: params.mobile,
        code: "123456",
        expiresIn: 180,
        scene,
      },
    );
    return {
      errCode: "uni-id-invalid-sms-template-id",
      errMsg: `未找到scene=${scene},的短信模版templateId。\n已启动测试模式，直接使用：123456作为短信验证码即可。\n如果是正式项目，请在路径：/common/uni-config-center/uni-id/config.json中service->sms中配置密钥等信息\n更多详情：https://uniapp.dcloud.io/uniCloud/uni-id.html#config`,
    };
  }
  // -- 测试代码

  return sendSmsCode.call(this, {
    mobile,
    scene,
  });
};
